package javase2.day05.demo01;
/*
throw：关键字
作用：
    可以使用throw关键字在指定的方法中抛出指定的异常
使用格式：
    throw new xxxException
注意：
    1throw关键字必须写在方法的内部
    2throw关键字后边new的对象必须是Exception或者Exception的子类对象
    3throw关键字抛出指定异常对象，我们必须处理这个异常对象
        throw关键字后边创建的是RuntimeException或者RunTimeException子类的对象，可以不用处理，默认交给JVM虚拟机
        throw关键字后边创建的是编译期异常，就必须处理异常，要么try-catch要么throws
 */
public class Throw {
    public static void main(String[] args) {
        int[] a=null;
        int i = a.length;
//        getElement(a, 3);
    }
    //以后使用方法时要对方法的参数进行合理性校验
    //如果不合理，就要处理此异常
    public static int getElement(int[] arr,int index){
        //两个异常的先后顺序区别：
        //1先进行null判断在索引判断，正常结果
        //2如果先索引判断，后null判断。索引异常时没有影响，然而null异常时报错类型正确但是无法提示异常信息.
        //  原因：
        /*
        int[] a=null;
        int i = a.length;
        java.lang.NullPointerException
        只要数组为null调用.length()就会空指针异常
        所以建议1
         */
        if (arr==null){
            throw new NullPointerException("传递的数组是空");
        }
        if (index<0||index>=arr.length){
            throw new ArrayIndexOutOfBoundsException("数组索引越界异常");
        }
        int i = arr[index];
        return i;
    }
}
